package com.xiaoc.bulldozer.common.dao;

import java.security.PublicKey;
import java.util.List;

import com.xiaoc.bulldozer.common.dto.FormRecordDto;
import com.xiaoc.bulldozer.common.dto.FormRecordQueryDto;
import com.xiaoc.bulldozer.common.model.FormRecord;
import org.apache.ibatis.annotations.Param;

/**
 * FormRecord Mapper 接口
 *
 * @author Danfo Yam
 * @date 2018-11-29 17:17:01
 */
public interface FormRecordMapper {

    /**
     * 根据条件查询FormRecord数量
     *
     * @param FormRecordQueryDto
     * @return 满足查询条件的记录数量
     */
    public Integer getFormRecordCountByCondition(FormRecordQueryDto formRecordQueryDto);

    /**
     * 根据条件分页查询FormRecord列表
     *
     * @param FormRecordQueryDto
     * @return 满足查询条件的FormRecord列表
     */
    public List<FormRecord> getFormRecordListByCondition(FormRecordQueryDto formRecordQueryDto);

    /**
     * 根据Id获取FormRecord
     *
     * @param id
     * @return FormRecord对象
     */
    public FormRecord getFormRecordById(Integer id);

    /**
     * 获取所有FormRecord列表
     *
     * @return FormRecord列表
     */
    public List<FormRecord> getAllFormRecordList();

    /**
     * 新增FormRecord
     *
     * @param formRecord
     * @return void
     */
    public void save(FormRecord formRecord);

    /**
     * 更新FormRecord
     *
     * @param formRecord
     * @return void
     */
    public void update(FormRecord formRecord);

    /**
     * 根据Id删除FormRecord
     *
     * @param id
     * @return void
     */
    public void deleteById(Integer id);


    /**
     * 通过formId， type 获取FormRecordDto集合
     *
     * @param formId
     * @param type
     * @return
     */
    public List<FormRecordDto> getFormRecordListByFormIdAndType(@Param("formId") Integer formId, @Param("type") Integer type);


    /**
     * 通过date 获取贷款数量集合
     *
     * @param date
     * @return
     */
    public List<FormRecordDto> getLoanCountListByDateAndFormIdListAndTypeAndProcessStatusListAndProcessPersonId(@Param("date") String date, @Param("formIdList") List<Integer> formIdList, @Param("type") Integer type, @Param("processStatusList") List<Integer> processStatusList, @Param("processPersonId") Integer processPersonId);


    /**
     * 通过date , processPersonId,type 获取集合
     * @param date
     * @param processPersonId
     * @param type
     * @return
     */
    public List<FormRecord> getLoanRecordByDateAndProcessPersonIdAndType(@Param("date") String date, @Param("processPersonId") Integer processPersonId, @Param("type") Integer type);
    /**
     * 根据formIdList 查询FormRecord列表
     *
     * @param formIdList
     * @return
     */
    public List<FormRecord> getRecentFormRecordByTypeAndStatusListAndFormIdList(@Param("type") Integer type, @Param("processStatusList") List<Integer> processStatusList, @Param("formIdList") List<Integer> formIdList);



    /**
     * processStatus， processPersonId 获取数量
     * @param processStatus
     * @param processPersonId
     * @return
     */
    public Integer getCountByStatusAndProcessPersonIdAndType(@Param("processStatus") Integer processStatus, @Param("processPersonId") Integer processPersonId, @Param("type") Integer type);


    /**
     * processStatus， processPersonId Type获取列表

     * @param formRecordQueryDto
     * @return
     */
    public List<FormRecord> getListByStatusAndProcessPersonIdAndType(FormRecordQueryDto formRecordQueryDto);

    /**
     * 根据条件获取去重的count
     * @param formRecordQueryDto
     * @return
     */
    public Integer getDistinctFormRecordCountByTypeAndAccountIdAndPhoneNumber(FormRecordQueryDto formRecordQueryDto);



    /**
     * 通过accountId，status， type 获取去重复的FormRecordDto列表
     *
     * @return
     */
    public List<FormRecordDto> getDistinctFormRecordDtoListByAccountIdAndStatusAndType(FormRecordQueryDto formRecordQueryDto);


    /**
     * 通过formIdList type 获取列表
     * @param formIdList
     * @param type
     * @return
     */
    public List<FormRecord> getFormRecordListByFormIdListAndType(@Param("formIdList") List<Integer> formIdList, @Param("type") Integer type);

}
